
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>1、Gradle快速入门 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>1、Gradle快速入门 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">Gradle是什么，其核心设计理念结合了哪两个工具的特点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Gradle是一款开源的构建自动化工具，它基于Apache Ant和Maven的概念。其设计结合了Ant的灵活性和Maven的“约定优于配置”理念，并采用Groovy或Kotlin DSL进行构建脚本的编写。</div>
          </div>
          <div class="card-source">来源: 1. Gradle简介 -> Gradle是什么</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">与Maven和Ant相比，Gradle在构建语言和性能方面有哪些显著优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在构建语言方面，Gradle使用更灵活的Groovy/Kotlin DSL，而Maven和Ant使用XML。在性能方面，Gradle通过增量构建技术实现了最快的构建速度，相比之下Maven较慢，Ant最慢。</div>
          </div>
          <div class="card-source">来源: 1. Gradle简介 -> 与Maven/Ant对比优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">概念</div>
          <div class="card-question">在Gradle中，“Task”（任务）的核心作用是什么，它如何支持高效的增量构建？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Task是Gradle构建过程中的基本执行单元。它通过对任务的输入（inputs）和输出（outputs）进行声明，来支持和实现增量构建，从而避免不必要的重复工作。</div>
          </div>
          <div class="card-source">来源: 2. Gradle核心概念 -> Task（任务）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Gradle的构建生命周期分为哪三个主要阶段？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Gradle的构建生命周期分为三个阶段：1. 初始化（Initialization）：解析settings.gradle文件，确定项目结构。2. 配置（Configuration）：解析所有项目的build.gradle文件，并构建任务的有向无环图（Task DAG）。3. 执行（Execution）：根据需要按顺序执行具体的Task。</div>
          </div>
          <div class="card-source">来源: 5. 基础实战应用 -> 构建生命周期</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Gradle Wrapper（包装器）的主要目的是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Gradle Wrapper的主要目的是保证构建环境的一致性。它使得任何人都可以在不预先安装Gradle的情况下，使用项目指定的Gradle版本来构建项目，确保了构建的可复现性。</div>
          </div>
          <div class="card-source">来源: 4. Gradle项目结构 -> Gradle Wrapper</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">在Gradle中，如何定义一个多项目（multi-project）的结构？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在Gradle中，多项目结构是通过`settings.gradle`文件来定义的。在该文件中，可以使用`include`语句来声明项目包含的子模块，例如`include 'submodule1', 'submodule2'`。</div>
          </div>
          <div class="card-source">来源: 4. Gradle项目结构 -> 核心配置文件</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">`build.gradle` 和 `settings.gradle` 这两个核心配置文件的主要区别是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`build.gradle`是项目的核心构建脚本，用于定义插件、依赖项、仓库等构建逻辑。而`settings.gradle`主要负责项目级别的配置，比如定义根项目名称和包含哪些子项目，它在构建生命周期的初始化阶段被解析。</div>
          </div>
          <div class="card-source">来源: 4. Gradle项目结构 -> 核心配置文件</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">概念</div>
          <div class="card-question">Gradle中的“Plugin”（插件）起什么作用？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Plugin（插件）为Gradle项目提供了预定义的任务和配置，用于简化特定类型项目的构建过程。例如，'java'插件会自动添加Java编译和测试等任务。插件分为官方插件（如Java、Android）和社区插件（如Spring Boot）。</div>
          </div>
          <div class="card-source">来源: 2. Gradle核心概念 -> Plugin（插件）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">请列举并说明`gradle clean`和`gradle build`这两个常用命令的作用。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`gradle clean`命令的作用是清理构建过程中生成的产物（例如build目录）。`gradle build`命令的作用是执行一次完整的项目构建，通常包括编译、测试和打包等所有任务。</div>
          </div>
          <div class="card-source">来源: 5. 基础实战应用 -> 常用命令</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
